// electron 模块可以用来控制应用的生命周期和创建原生浏览窗口
const { app, BrowserWindow, Menu, ipcMain, dialog} = require('electron')

let windowConfig = [
  {
    windowObj: null,
    url: './page/login.html',
    config: {
      title: '',
      width: 251,
      height: 320,
      resizable: false,
      webPreferences: {
        nodeIntegration: true,
        nodeIntegrationInWorker: true,
        contextIsolation: false
      }
    }
  },
  {
    windowObj: null,
    url: './page/index.html',
    config: {
      title: '',
      minHeight: 590,
      minWidth: 710,
      width: 900,
      height: 650,
      titleBarStyle: 'hidden',
      titleBarOverlay: true,
      webPreferences: {
        nodeIntegration: true,
        nodeIntegrationInWorker: true,
        contextIsolation: false
      }
    }
  }
]

let index = 0

const createWindow = () => {
  // 创建浏览窗口
  windowConfig[index].windowObj = new BrowserWindow(windowConfig[index].config)

  // 加载 index.html
  windowConfig[index].windowObj.loadFile(windowConfig[index].url)

  // 打开开发工具
  windowConfig[index].windowObj.webContents.openDevTools()
}

ipcMain.on('openIndex', (event) => {
  windowConfig[index].windowObj.close()
  index = 1
  createWindow()
})

ipcMain.on('windowsShake', () => {
  let position = windowConfig[index].windowObj.getPosition();
  let shakePosition = [
    position[0] - 30,
    position[0],
    position[0] + 30,
    position[0] - 30,
    position[0],
    position[0] + 30,
    position[0] - 30,
    position[0],
    position[0] + 30,
    position[0],
  ];

  let i = 0;

  let shakeInterval = setInterval(() => {
    if (i < shakePosition.length) {
      windowConfig[index].windowObj.setPosition(shakePosition[i], position[1])
      i+=1
    } else {
      clearInterval(shakeInterval)
    }
  },10)
})



ipcMain.handle('openFileSelect', async (event) => {
  const { canceled, filePaths } = await dialog.showOpenDialog({
    filters: [
      { name: 'Images', extensions: ['jpg', 'png', 'gif', 'jpeg'] },
    ]
  })
  if (!canceled) {
    return filePaths[0]
  }
})



// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()
})

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})


const menu = Menu.buildFromTemplate([])
Menu.setApplicationMenu(menu)